package main

import (
	database_redis "jwt-demo/database/redis"
	cors_middleware "jwt-demo/middleware/cors"
	login_router "jwt-demo/router/login"
	user_router "jwt-demo/router/user"

	"github.com/gin-gonic/gin"
)

// type MyClaims struct {
// 	jwt.StandardClaims
// 	Username string `json:"username"`
// }

// var mySigningKey = []byte("jwt-secret")

// type User struct {
// 	Username string `json:"username"`
// }

func main() {
	r := gin.Default()
	database_redis.RedisInit()
	r.Use(cors_middleware.CORS())
	login_router.LoginRouterInit(r)
	user_router.UserRouterInit(r)
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	// 依赖结构体实现jwt
	// r.POST("/getTokenByStruct", func(c *gin.Context) {
	// 	var user User
	// 	if err := c.ShouldBindJSON(&user); err != nil {
	// 		c.JSON(200, gin.H{
	// 			"code":    500,
	// 			"message": "请求失败",
	// 		})
	// 		return
	// 	}
	// 	// MapClaims：map
	// 	// StandardClaims：struct
	// 	// 第一个参数：加密方式
	// 	var claim = MyClaims{
	// 		Username: user.Username,
	// 		StandardClaims: jwt.StandardClaims{
	// 			// ExpiresAt: 100000,
	// 			Issuer:    "root",
	// 			NotBefore: time.Now().Unix() - 60,
	// 		},
	// 	}
	// 	// 这里可以生成token
	// 	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim)
	// 	// 在返回前端之前需要加密
	// 	tokenString, err := token.SignedString(mySigningKey)
	// 	if err != nil {
	// 		c.JSON(200, gin.H{
	// 			"code":    500,
	// 			"message": "请求失败",
	// 		})
	// 	} else {
	// 		c.JSON(200, gin.H{
	// 			"code":    200,
	// 			"message": "请求成功",
	// 			"data":    tokenString,
	// 		})
	// 	}
	// })
	// 依赖map实现jwt
	// r.POST("/getTokenByMap", func(c *gin.Context) {
	// 	jwt.NewWithClaims()
	// })

	// 解析token
	// r.POST("/parseToken", func(c *gin.Context) {
	// 	var tokenString = c.GetHeader("token")
	// 	token, err := jwt.ParseWithClaims(tokenString, &MyClaims{}, func(token *jwt.Token) (interface{}, error) {
	// 		return mySigningKey, nil
	// 	})
	// 	if err != nil {
	// 		c.JSON(200, gin.H{
	// 			"code":    500,
	// 			"message": "请求失败",
	// 		})
	// 		return
	// 	}
	// 	c.JSON(200, gin.H{
	// 		"code":    200,
	// 		"message": "请求成功",
	// 		"data":    token.Claims.(*MyClaims).Username,
	// 	})
	// })
	r.Run(":9000")
}
